/*
 * Copyright (c) 2005, the JUNG Project and the Regents of the University of
 * California All rights reserved.
 *
 * This software is open-source under the BSD license; see either "license.txt"
 * or http://jung.sourceforge.net/license.txt for a description.
 *
 * Created on Jul 3, 2005
 */

package com.davetrudes.jung.client.visualization.transform;



import com.davetrudes.jung.client.graphics.geom.AffineTransform;
import com.davetrudes.jung.client.graphics.geom.Point2D;
import com.davetrudes.jung.client.visualization.transform.shape.ShapeTransformer;
import com.davetrudes.jung.client.visualization.util.ChangeEventSupport;

/**
 * Provides an API for the mutation of a transformer
 * and for adding listeners for changes on the transformer
 *
 * @author Tom Nelson
 *
 *
 */
public interface MutableTransformer extends ShapeTransformer, ChangeEventSupport {

    void translate(double dx, double dy);

    void setTranslate(double dx, double dy);

    void scale(double sx, double sy, Point2D point);

    void setScale(double sx, double sy, Point2D point);

    void rotate(double radians, Point2D point);

    void rotate(double radians, double x, double y);

    void shear(double shx, double shy, Point2D from);

    void concatenate(AffineTransform transform);

    void preConcatenate(AffineTransform transform);

    double getScaleX();

    double getScaleY();

    double getScale();

    double getTranslateX();

    double getTranslateY();

    double getShearX();

    double getShearY();

    AffineTransform getTransform();

    void setToIdentity();

    double getRotation();

}
